<?php

/**
 * This is the model class for table "todo".
 *
 * The followings are the available columns in table 'todo':
 * @property string   $id
 * @property string   $user_id
 * @property string   $category_id
 * @property integer  $position
 * @property string   $name
 * @property string   $sync_date
 * @property string   $create_date
 * @property string   $modify_date
 * @property string   $complete_date
 * @property string   $delete_date
 * @property string   $deadline
 *
 * The followings are the available model relations:
 * @property Category $category
 * @property User     $user
 */
class Todo extends CActiveRecord {
    /**
     * Returns the static model of the specified AR class.
     * @param string $className active record class name.
     * @return Todo the static model class
     */
    public static function model($className = __CLASS__)
    {
        return parent::model($className);
    }

    /**
     * @return string the associated database table name
     */
    public function tableName()
    {
        return 'todo';
    }

    /**
     * @return array validation rules for model attributes.
     */
    public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array(
                'name',
                'required'
            ),
            array(
                'position',
                'numerical',
                'integerOnly' => true
            ),
            array(
                'user_id, category_id',
                'length',
                'max' => 11
            ),
            array(
                'sync_date, create_date, modify_date, complete_date, delete_date, deadline',
                'safe'
            ),
            // The following rule is used by search().
            // Please remove those attributes that should not be searched.
            array(
                'id, user_id, category_id, position, name, sync_date, create_date, modify_date, complete_date, delete_date, deadline',
                'safe',
                'on' => 'search'
            ),
        );
    }

    /**
     * @return array relational rules.
     */
    public function relations()
    {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array(
            'category' => array(
                self::BELONGS_TO,
                'Category',
                'category_id'
            ),
            'user'     => array(
                self::BELONGS_TO,
                'User',
                'user_id'
            ),
        );
    }

    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels()
    {
        return array(
            'id'            => 'ID',
            'user_id'       => 'User',
            'category_id'   => 'Category',
            'position'      => 'Position',
            'name'          => 'Name',
            'sync_date'     => 'Sync Date',
            'create_date'   => 'Create Date',
            'modify_date'   => 'Modify Date',
            'complete_date' => 'Complete Date',
            'delete_date'   => 'Delete Date',
            'deadline'      => 'Deadline',
        );
    }

    /**
     * Retrieves a list of models based on the current search/filter conditions.
     * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
     */
    public function search()
    {
        // Warning: Please modify the following code to remove attributes that
        // should not be searched.

        $criteria = new CDbCriteria;

        $criteria->compare('id', $this->id, true);
        $criteria->compare('user_id', $this->user_id, true);
        $criteria->compare('category_id', $this->category_id, true);
        $criteria->compare('position', $this->position);
        $criteria->compare('name', $this->name, true);
        $criteria->compare('sync_date', $this->sync_date, true);
        $criteria->compare('create_date', $this->create_date, true);
        $criteria->compare('modify_date', $this->modify_date, true);
        $criteria->compare('complete_date', $this->complete_date, true);
        $criteria->compare('delete_date', $this->delete_date, true);
        $criteria->compare('deadline', $this->deadline, true);

        return new CActiveDataProvider($this, array(
                                                   'criteria' => $criteria,
                                              ));
    }

    /**
     * @return bool
     */
    public function isExpired()
    {
        if (!is_null($this->deadline) && strtotime($this->deadline) <= time()) {
            return true;
        } else {
            return false;
        }
    }
}